assertThat

Syntax:

assertThat( 'pErwarteterWert' : 'pTatsächlicherWert' : pMatcher [: 'nachricht');

Beschreibung:

Prüft, ob die Daten, addressiert durch 'pErwarteterWert' und 'pTatsächlicherWert', den in der Prozedur 'pMatcher' hinterlegten Regeln entsprechen. Die Zusicherung gilt als fehlgeschlagen, wenn der Matcher *off zurückliefert.

Diese Zusicherung kann zum Vergleichen besonders langer Zeichenketten oder anderer komplexer Datentypen, wie zum Beispiel XML oder Json verwendet werden.

Funktionswert:

void

Beispiel 1 (Zeichenkette):

expected = 'Donald Duck';
actual = 'Dagobert Duck';
assertThat( %addr(expected) :
            %addr(actual) :
            %paddr(assertThatMatcher));

In diesem Beispiel sollte der Matcher *off zurückgeben, weil 'Donald Duck' offensichtlich nicht gleich 'Dagobert Duck' ist.

Beispiel 2 (Datenstruktur):

dcl-ds data_t qualified template;
  type    char(10);
  seqNbr  int(10);
  itemNbr char(10);
end-ds;

dcl-ds erwarteterWert likeds(data_t) inz;
dcl-ds tatsaechlicherWert likeds(data_t) inz;

dcl-pr matcher ind;
  expected   pointer const;
  actual     pointer const;
  message    like(msgText_t) options(*nopass);
end-pr;

erwarteterWert.type = '*ITEM';
erwarteterWert.seqNbr = 1;
erwarteterWert.itemNbr = '4715687963';

tatsaechlicherWert.type = '*ITEM';
tatsaechlicherWert.seqNbr = 2;
tatsaechlicherWert.itemNbr = '8858416778';

assertThat( %addr(erwarteterWert) :
            %addr(tatsaechlicherWert) :
            %paddr(matcher));

// -------------------------------------------------------
//  Prozedur zum Vergleichen von 'erwarteterWert'
//  mit 'tatsaechlicherWert'.
// -------------------------------------------------------
dcl-proc matcher export;
  dcl-pi *n ind;
    expected   pointer const;
    actual     pointer const;
    message    like(msgText_t) options(*nopass);
  end-pi;

  dcl-ds expectedData likeds(data_t) based(expected);
  dcl-ds actualData likeds(data_t) based(actual);

  if (expectedData.type = actualData.type and 
      expectedData.seqNbr = actualData.seqNbr and
      expectedData.itemNbr = actualData.itemNbr);
    return *on;
  else;
    return *off;
  endif;

end-proc;

In diesem Beispiel muss der Matcher die Datenstrukturen vergleichen und, abhängig vom Ergebnis der Prüfung, entweder *on oder *off zurückgeben. Sehr wahrscheinlich wird er *off zurückgeben, weil weder 'seqNbr' noch 'itemNbr' übereinstimmen.